home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / GDebi / DscSrcPackage.py < prev    next >
Text File  |  2009-09-23  |  4KB  |  94 lines

  1. # Copyright (c) 2005-2009 Canonical Ltd
  2. #
  3. # AUTHOR:
  4. # Michael Vogt <mvo@ubuntu.com>
  5. #
  6. # This file is part of GDebi
  7. #
  8. # GDebi is free software; you can redistribute it and/or
  9. # modify it under the terms of the GNU General Public License as published
  10. # by the Free Software Foundation; either version 2 of the License, or (at
  11. # your option) any later version.
  12. #
  13. # GDebi is distributed in the hope that it will be useful,
  14. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16. # General Public License for more details.
  17. #
  18. # You should have received a copy of the GNU General Public License
  19. # along with GDebi; if not, write to the Free Software
  20. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  21. #
  22.  
  23. import apt_inst, apt_pkg
  24. import apt
  25. import sys
  26. import os 
  27. from gettext import gettext as _
  28. from DebPackage import DebPackage
  29. from Cache import Cache
  30.  
  31. class DscSrcPackage(DebPackage):
  32.     def __init__(self, cache, file=None):
  33.         DebPackage.__init__(self, cache)
  34.         self.file = file
  35.         self.depends = []
  36.         self.conflicts = []
  37.         self.binaries = []
  38.         if file != None:
  39.             self.open(file)
  40.     def getConflicts(self):
  41.         return self.conflicts
  42.     def getDepends(self):
  43.         return self.depends
  44.     def open(self, file):
  45.         depends_tags = ["Build-Depends:", "Build-Depends-Indep:"]
  46.         conflicts_tags = ["Build-Conflicts:", "Build-Conflicts-Indep:"]
  47.         for line in open(file):
  48.             # check b-d and b-c
  49.             for tag in depends_tags:
  50.                 if line.startswith(tag):
  51.                     key = line[len(tag):].strip()
  52.                     self.depends.extend(apt_pkg.ParseSrcDepends(key))
  53.             for tag in conflicts_tags:
  54.                 if line.startswith(tag):
  55.                     key = line[len(tag):].strip()
  56.                     self.conflicts.extend(apt_pkg.ParseSrcDepends(key))
  57.             # check binary and source and version
  58.             if line.startswith("Source:"):
  59.                 self.pkgName = line[len("Source:"):].strip()
  60.             if line.startswith("Binary:"):
  61.                 self.binaries = [pkg.strip() for pkg in line[len("Binary:"):].split(",")]
  62.             if line.startswith("Version:"):
  63.                 self._sections["Version"] = line[len("Version:"):].strip()
  64.             # we are at the end 
  65.             if line.startswith("-----BEGIN PGP SIGNATURE-"):
  66.                 break
  67.         s = _("Install Build-Dependencies for "
  68.               "source package '%s' that builds %s\n"
  69.               ) % (self.pkgName, " ".join(self.binaries))
  70.         self._sections["Description"] = s
  71.         
  72.     def checkDeb(self):
  73.         if not self.checkConflicts():
  74.             for pkgname in self._installedConflicts:
  75.                 if self._cache[pkgname]._pkg.Essential:
  76.                     raise Exception, _("A essential package would be removed")
  77.                 self._cache[pkgname].markDelete()
  78.         # FIXME: a additional run of the checkConflicts()
  79.         #        after _satisfyDepends() should probably be done
  80.         return self._satisfyDepends(self.depends)
  81.  
  82. if __name__ == "__main__":
  83.  
  84.     cache = Cache()
  85.     #s = DscSrcPackage(cache, "../tests/3ddesktop_0.2.9-6.dsc")
  86.     #s.checkDep()
  87.     #print "Missing deps: ",s.missingDeps
  88.     #print "Print required changes: ", s.requiredChanges
  89.  
  90.     s = DscSrcPackage(cache)
  91.     d = "libc6 (>= 2.3.2), libaio (>= 0.3.96) | libaio1 (>= 0.3.96)"
  92.     print s._satisfyDepends(apt_pkg.ParseDepends(d))
  93.     
  94.